package com.bookmarket.utils;

import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;


/**
 * freemarker工具类
 * 接收视图与数据，生成静态界面
 */
@Component
public class TemplateUtils {

    /**
     * @param data 数据模型
     *  templatePath 去掉了模板路径，模板均存放于统一的目录下
     * @param templateFileName 模板文件名 "main.html"
     * @param staticPageName 生成的静态文件的文件名
     */
    public static void createStaticPage(HttpServletRequest request, String staticPageName , Map<String, Object> data, String templateFileName) {
        try {
            //创建一个freemarker.template.Configuration实例，它是存储 FreeMarker 应用级设置的核心部分
            //将Configuration 从参数列表中移至内容中
            Configuration cfg=new Configuration(Configuration.VERSION_2_3_22);
            cfg.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX);// 设置标签
            cfg.setServletContextForTemplateLoading(request.getServletContext(),"before/template");// 设置临时加载目录。即加载模板所在的目录
            cfg.setDefaultEncoding("UTF-8");
            cfg.setNumberFormat("#");
            Template temp = cfg.getTemplate(templateFileName);// 获取模板对象
            //取得该模板名称，如果存在则清空后存入
            File file = new File((request.getServletContext().getRealPath("/before/template2/"+staticPageName+".html")));
            Writer out = new OutputStreamWriter(new FileOutputStream(file),"utf-8");
            temp.process(data, out);    //写入数据
            out.flush();        //清空缓存，输出所有
            out.close();        //关闭输出流
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
